import axios from "axios";
import {getTokenName, messageConfirm, messageTip, removeToken} from "../util/util.js";

//定义后端接口地址的前缀
axios.defaults.baseURL = "http://localhost:8089"

export function doGet(url, params) {
    return axios({
        method: 'get', url: url, params: params, dataType: 'json'
    })
}


export function doPost(url, data) {
    return axios({
        method: 'post', url: url, data: data, dataType: 'json'
    })
}

export function doPut(url, data) {
    return axios({
        method: 'put', url: url, data: data, dataType: 'json'
    })
}

export function doDelete(url, params) {
    return axios({
        method: 'delete', url: url, params: params, dataType: 'json'
    })
}

// 添加请求拦截器
axios.interceptors.request.use((config) => {
    // 在发送请求之前做些什么，在请求头中放一个token（jwt），传给后端接口
    let token = window.sessionStorage.getItem(getTokenName());
    //如果token没有值
    if (!token) {
        token = window.localStorage.getItem(getTokenName());
        if (token) {
            config.headers['remeberMe'] = true;
        }
    }
    //如果token有值
    if (token) {
        config.headers['Authorization'] = token;
    }
    return config;
}, (error) => {
    // 对请求错误做些什么
    return Promise.reject(error);
});

// 添加响应拦截器
axios.interceptors.response.use((response) => {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么,拦截token验证的结果，进行相应的提示和页面跳转
    if (response.data.code > 900) {     //code>900 表示token验证失败
        //给用户提示并跳转页面
        messageConfirm(response.data.msg + "，是否重新去登录？")
            .then(() => {   //用户点确定所执行的函数
                //既然后端验证失败，则直接删掉token
                removeToken();
                //跳转页面
                window.location.href = "/"
            })
            .catch(() => {  //用户点击取消的执行函数
                messageTip("取消去登录", "warning")
            })
        return;
    }
    return response;
}, function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    return Promise.reject(error);
});